/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CriarBD;

import java.sql.Statement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Julian
 */
public class VerificaConexaoDAO {

    static Connection connection;
    ConnectionFactory connectionFactory = new ConnectionFactory();

    public boolean VerificaConexao(String newServer, String newPorta, String newSenha) {
        connection = connectionFactory.getConnection(newServer, newPorta, newSenha);
        try {
            if (connection.isValid(1)) {
                return true;
            } else {
                return false;
            }
        } catch (SQLException ex) {
            Logger.getLogger(VerificaConexaoDAO.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }

    public boolean criaBancoDeDados(String nameDataBase) {
        try {
            Statement statement = connection.createStatement();
            if (!statement.execute("CREATE DATABASE IF NOT EXISTS " + nameDataBase)) {
                return true;
            } else {
                return false;
            }

        } catch (SQLException ex) {
            Logger.getLogger(VerificaConexaoDAO.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }

    public boolean criaTabelas(String dataBase) {
        try {
            Statement statement = connection.createStatement();

            statement.execute("create table `" + dataBase + "`.`clientes`("
                    

+"(	CODCLIENTE	INTEGER NOT NULL  AUTO_INCREMENT,\n" +
"	NOME			VARCHAR(255),\n" +
"	CPF		VARCHAR(15),\n" +
"	RG		VARCHAR(15),\n" +
"	DATAANIVERSARIO	DATE,\n" +
"	ENDERECO	VARCHAR(255),\n" +
"	BAIRRO		VARCHAR(70),\n" +
"	CIDADE		VARCHAR(50),\n" +
"	ESTADO		VARCHAR(2),\n" +
"	CARRO		VARCHAR(100),\n" +
"	MARCA		VARCHAR(50),\n" +
"	MODELO		VARCHAR(50),\n" +
"	MOTOR		VARCHAR(30),\n" +
"	ANO		VARCHAR(10),\n" +
"	PLACA		VARCHAR(8),\n" +
"	KM		VARCHAR(10),\n" +
"	TELEFONE	VARCHAR(15),\n" +
"	CELULAR		VARCHAR(15),\n" +
"	OPERADORA	VARCHAR(15),\n" +
"	EMAIL		VARCHAR(100),\n" +
"PRIMARY KEY(CODCLIENTE)\n" +
")\n" +
"type InnoDB;");
            
            
              statement.execute("create table `" + dataBase + "`.`produtos`("  
+"(	CODPRODUTO		VARCHAR(100),\n" +
"	DESCRICAO		VARCHAR(255),\n" +
"	MARCA			VARCHAR(100),\n" +
"	VLRCUSTO		DOUBLE(11,2),\n" +
"	VLRVENDA		DOUBLE(11,2),\n" +
"	QTDESTOQUE		INTEGER,\n" +
"PRIMARY KEY (CODPRODUTO)\n" +
")\n" +
"type InnoDB;");
            
              
               statement.execute("create table `" + dataBase + "`.`funcionarios`("
            
+"(	CODFUNCIONARIO	INTEGER NOT NULL AUTO_INCREMENT,\n" +
"	NOME			VARCHAR(255),\n" +
"	CPF		VARCHAR(15),\n" +
"	RG		VARCHAR(15),\n" +
"	ENDERECO	VARCHAR(255),\n" +
"	BAIRRO		VARCHAR(70),\n" +
"	TELEFONE	VARCHAR(15),\n" +
"	CELULAR		VARCHAR(15),\n" +
"	OPERADORA	VARCHAR(15),\n" +
"	EMAIL		VARCHAR(100),\n" +
"	FUNCAO		VARCHAR(50),\n" +
"	USUARIO		VARCHAR(50),\n" +
"	SENHA		VARCHAR(50),\n" +
"	ACESSO		INTEGER,\n" +
"PRIMARY KEY(CODFUNCIONARIO)\n" +
")\n" +
"type InnoDB;");
              
            
            statement.execute("create table `" + dataBase + "`.`condpgto`("
+ "(	CODCOND	INTEGER NOT NULL AUTO_INCREMENT,\n" +
"	COND		VARCHAR(50),\n" +
"	\n" +
"PRIMARY KEY(CODCOND)\n" +
")\n" +
"type InnoDB;");

            

            statement.execute("create table `" + dataBase + "`.`formaspgto`("
+"(	CODFORMA	INTEGER NOT NULL AUTO_INCREMENT,\n" +
"	FORMA		VARCHAR(50),\n" +
"	\n" +
"PRIMARY KEY(CODFORMA)\n" +
")\n" +
"type InnoDB;;");

            statement.execute("create table `" + dataBase + "`.`statusorcamento`("     
+"(	CODSTATUSORCAMENTO	INTEGER NOT NULL,\n" +
"	STATUSORCAMENTO	VARCHAR(30),\n" +
"	\n" +
"PRIMARY KEY(CODSTATUSORCAMENTO)\n" +
")\n" +
"type InnoDB;");
           
            statement.execute("create table `" + dataBase + "`.`statusos`("
+"(	CODSTATUSOS		INTEGER NOT NULL,\n" +
"	STATUSOS		VARCHAR(30),\n" +
"			\n" +
"PRIMARY KEY(CODSTATUSOS)\n" +
")\n" +
"type InnoDB;");
            
            
            
            
            
            statement.execute("create table `" + dataBase + "`.`perdas`("        
+"(\n" +
"	CODPERDA		INTEGER NOT NULL,\n" +
"	IDFUNCIONARIO		INTEGER NOT NULL\n" +
"REFERENCES FUNCIONARIOS(CODFUNCIONARIO),\n" +
"	DATAPERDA		DATE,\n" +
"PRIMARY KEY(CODPERDA, IDFUNCIONARIO)\n" +
")\n" +
"type InnoDB;");

            
               statement.execute("create table `" + dataBase + "`.`perdasdet`("
+"(\n" +
"	IDPERDA			INTEGER NOT NULL\n" +
"REFERENCES PERDAS(CODPERDA),\n" +
"	IDPRODUTO		VARCHAR(100)\n" +
"REFERENCES PRODUTOS(CODPRODUTO),\n" +
"	QTDPERDA		INTEGER,\n" +
"PRIMARY KEY(IDPERDA, IDPRODUTO)\n" +
")\n" +
"type InnoDB;");
                       
                       
                       
            
            statement.execute("create table `" + dataBase + "`.`perdas`("
            
+"(	CODOS			INTEGER NOT NULL,\n" +
"	IDSTATUSOS		INTEGER NOT NULL\n" +
"REFERENCES STATUSOS(CODSTATUSOS),\n" +
"	IDFUNCIONARIO		INTEGER NOT NULL\n" +
"REFERENCES FUNCIONARIOS(CODFUNCIONARIO),\n" +
"	IDCLIENTE		INTEGER NOT NULL\n" +
"REFERENCES CLIENTES(CODCLIENTE),\n" +
"	IDFORMA		INTEGER NOT NULL\n" +
"REFERENCES FORMASPGTO(CODFORMA),\n" +
"	IDCOND			INTEGER NOT NULL\n" +
"REFERENCES CONDPGTO(CODCOND),\n" +
"	DATAOS			DATE,\n" +
"	DATATROCAOLEO		DATE,\n" +
"	DATATROCACORREIA	DATE,\n" +
"	SUBTOTAL		DOUBLE(11,2),\n" +
"	SERVICOTERCEIRO		DOUBLE(11,2),\n" +
"	MAOOBRA		DOUBLE(11,2),\n" +
"	DESCONTO		DOUBLE(11,2),\n" +
"	TOTAL			DOUBLE(11,2),\n" +
"	OBS			VARCHAR(255),\n" +
"		\n" +
"PRIMARY KEY (CODOS, IDFUNCIONARIO)\n" +
")\n" +
"type InnoDB;");
            
            statement.execute("create table `" + dataBase + "`.`perdasdet`("
+"(	IDOS			INTEGER NOT NULL\n" +
"REFERENCES OS(CODOS),\n" +
"	IDPRODUTO		VARCHAR(100) NOT NULL\n" +
"REFERENCES PRODUTOS(CODPRODUTO),\n" +
"	QTDOS		INTEGER,	\n" +
"PRIMARY KEY(IDOS, IDPRODUTO)\n" +
")\n" +
"type InnoDB;");            
            

            statement.execute("create table `" + dataBase + "`.`entradas`("
+"(	CODENTRADA		INTEGER NOT NULL,\n" +
"	IDFUNCIONARIO		INTEGER NOT NULL\n" +
"REFERENCES FUNCIONARIOS(CODFUNCIONARIO),\n" +
"	DATAENTRADA		DATE,\n" +
"PRIMARY KEY(CODENTRADA, IDFUNCIONARIO)\n" +
")\n" +
"type InnoDB;");
            
            statement.execute("create table `" + dataBase + "`.`entradasdet`("
+"(	IDENTRADA		INTEGER NOT NULL\n" +
"REFERENCES ENTRADAS(CODENTRADA),\n" +
"	IDPRODUTO		VARCHAR(100) NOT NULL\n" +
"REFERENCES PRODUTOS(CODPRODUTO),\n" +
"	QTDENTRADA		INTEGER,	\n" +
"PRIMARY KEY(IDENTRADA, IDPRODUTO)\n" +
")\n" +
"type InnoDB;");
            
            
            statement.execute("create table `" + dataBase + "`.`orcamentos`("
+"(	CODORCAMENTO		INTEGER NOT NULL,\n" +
"	IDSTATUSORCAMENTO	INTEGER NOT NULL\n" +
"references STATUSORCAMENTO(CODSTATUSORCAMENTO),\n" +
"	IDFUNCIONARIO		INTEGER NOT NULL\n" +
"REFERENCES FUNCIONARIOS(CODFUNCIONARIO),\n" +
"	IDCLIENTE		INTEGER NOT NULL\n" +
"REFERENCES CLIENTES(CODCLIENTE),\n" +
"	IDFORMA		INTEGER NOT NULL\n" +
"REFERENCES FORMASPGTO(CODFORMA),\n" +
"	IDCOND			INTEGER NOT NULL\n" +
"REFERENCES CONDPGTO(CODCOND),\n" +
"	DATAORCAMENTO		DATE,\n" +
"	DATAVALIDADE		DATE,\n" +
"	DATATROCAOLEO		DATE,\n" +
"	DATATROCACORREIA	DATE,\n" +
"	SUBTOTAL		DOUBLE(11,2),\n" +
"	SERVICOTERCEIRO		DOUBLE(11,2),\n" +
"	MAOOBRA		DOUBLE(11,2),\n" +
"	DESCONTO		DOUBLE(11,2),\n" +
"	TOTAL			DOUBLE(11,2),\n" +
"	OBS			VARCHAR(255),\n" +
"		\n" +
"PRIMARY KEY (CODORCAMENTO)\n" +
")\n" +
"type InnoDB;");

            
            statement.execute("create table `" + dataBase + "`.`orcamentodet`("
+"(	IDORCAMENTO		INTEGER NOT NULL\n" +
"REFERENCES ORCAMENTO(CODORCAMENTO),\n" +
"	IDPRODUTO		VARCHAR(100) NOT NULL\n" +
"REFERENCES PRODUTOS(CODPRODUTO),\n" +
"	QTDORCAMENTO		INTEGER,	\n" +
"PRIMARY KEY(IDORCAMENTO, IDPRODUTO)\n" +
")\n" +
"type InnoDB;");

            statement.execute("create view `" + dataBase + "`.`aniversariantes`("
            
+"(nome, aniversario, telefone, celular, email, data_atual)\n" +
"AS SELECT nome, dataaniversario, telefone, celular, email, CURDATE()\n" +
"FROM clientes\n" +
"WHERE MONTH (dataaniversario) = MONTH(CURDATE() + INTERVAL 30 DAY) OR MONTH (dataaniversario) = MONTH(CURDATE());");         
                    
            statement.execute("create view `" + dataBase + "`.`consultaorcamento`("      
+"(Orcamento, idstatus, statusorcamento, idfuncionario, nomefunc, idcliente, nomecli, idforma, forma, idcond, cond, dataorcamento, datavencimento, datatrocaoleo, datatrocacorreia, subtotal, servicoterceiro, maoobra, desconto, total, obs, carro, marca, modelo, motor, placa, ano, km, telefone, celular, operadora)\n" +
"AS SELECT orcamento.codorcamento, orcamento.IDSTATUSORCAMENTO, statusorcamento.STATUSORCAMENTO, orcamento.idfuncionario, funcionarios.nome, orcamento.idcliente, clientes.nome, orcamento.idforma, formaspgto.forma, orcamento.idcond, condpgto.cond, orcamento.dataorcamento, orcamento.datavalidade, orcamento.datatrocaoleo, orcamento.DATATROCACORREIA, orcamento.subtotal, orcamento.servicoterceiro, orcamento.maoobra, orcamento.desconto, orcamento.total, orcamento.obs,\n" +
"clientes.carro, clientes.marca, clientes.modelo, clientes.motor, clientes.placa, clientes.ano, clientes.km, clientes.telefone, clientes.celular, clientes.operadora\n" +
"FROM orcamento, statusorcamento, formaspgto, condpgto, clientes, funcionarios\n" +
"WHERE orcamento.IDCLIENTE = clientes.codcliente AND orcamento.IDCOND = condpgto.codcond AND orcamento.IDFORMA = formaspgto.codforma AND orcamento.IDFUNCIONARIO = funcionarios.codfuncionario AND orcamento.IDSTATUSORCAMENTO = statusorcamento.codstatusorcamento;");
             
            
            statement.execute("create view `" + dataBase + "`.`consultaos`("
+"(os, idstatus, statusos, idfuncionario, nomefunc, idcliente, nomecli, idforma, forma, idcond, cond, dataos, datatrocaoleo, datatrocacorreia, subtotal, servicoterceiro, maoobra, desconto, total, obs, carro, marca, modelo, motor, placa, ano, km, telefone, celular, operadora)\n" +
"AS SELECT os.codos, os.IDSTATUSOS, statusos.STATUSOS, os.idfuncionario, funcionarios.nome, os.idcliente, clientes.nome, os.idforma, formaspgto.forma, os.idcond, condpgto.cond, os.dataos, os.datatrocaoleo, os.DATATROCACORREIA, os.subtotal, os.servicoterceiro, os.maoobra, os.desconto, os.total, os.obs,\n" +
"clientes.carro, clientes.marca, clientes.modelo, clientes.motor, clientes.placa, clientes.ano, clientes.km, clientes.telefone, clientes.celular, clientes.operadora\n" +
"FROM os, statusos, formaspgto, condpgto, clientes, funcionarios\n" +
"WHERE os.IDCLIENTE = clientes.codcliente AND os.IDCOND = condpgto.codcond AND os.IDFORMA = formaspgto.codforma AND os.IDFUNCIONARIO = funcionarios.codfuncionario AND os.IDSTATUSOS = statusos.codstatusos;");
            statement.execute("create view `" + dataBase + "`.`trocaoleo`("
+"(codigo, idcliente, nome, proximatroca, telefone, celular, email, data_atual)\n" +
"AS SELECT os.CODOS, os.IDCLIENTE, clientes.nome, os.datatrocaoleo, clientes.telefone, clientes.celular, clientes.email, CURDATE()\n" +
"FROM clientes, os\n" +
"WHERE MONTH (os.DATATROCAOLEO) = MONTH(CURDATE() + INTERVAL 30 DAY) OR MONTH (os.DATATROCAOLEO) = MONTH(CURDATE()) AND os.IDCLIENTE = clientes.CODCLIENTE;");            
            
            statement.execute("create view `" + dataBase + "`.`trocacorreia`("
+"CREATE VIEW trocaCorreia\n" +
"(codigo, idcliente, nome, proximatroca, telefone, celular, email, data_atual)\n" +
"AS SELECT os.CODOS, os.IDCLIENTE, clientes.nome, os.datatrocacorreia, clientes.telefone, clientes.celular, clientes.email, CURDATE()\n" +
"FROM clientes, os\n" +
"WHERE MONTH (os.DATATROCACORREIA) = MONTH(CURDATE() + INTERVAL 30 DAY) OR MONTH (os.DATATROCACORREIA) = MONTH(CURDATE()) AND os.IDCLIENTE = clientes.CODCLIENTE;");            
            
            
            
            statement.execute("insert into " + dataBase + ".formapgto values (1, 'Dinheiro')");
            statement.execute("insert into " + dataBase + ".formapgto values (2, 'Débito')");
            statement.execute("insert into " + dataBase + ".formapgto values (3, 'Crédito')");
            statement.execute("insert into " + dataBase + ".formapgto values (4, 'Boleto')");
            statement.execute("insert into " + dataBase + ".formapgto values (5, 'Cheque')");
            
            
            statement.execute("insert into " + dataBase + ".condpgto values (1, 'À Vista')");
            statement.execute("insert into " + dataBase + ".condpgto values (2, '2 Vezes')");
            statement.execute("insert into " + dataBase + ".condpgto values (3, '3 Vezes')");
            statement.execute("insert into " + dataBase + ".condpgto values (4, '4 Vezes')");
            statement.execute("insert into " + dataBase + ".condpgto values (5, '5 Vezes')");
            statement.execute("insert into " + dataBase + ".condpgto values (6, '6 Vezes')");
            statement.execute("insert into " + dataBase + ".condpgto values (7, '7 Vezes')");
            statement.execute("insert into " + dataBase + ".condpgto values (8, '8 Vezes')");
            statement.execute("insert into " + dataBase + ".condpgto values (9, '9 Vezes')");
            statement.execute("insert into " + dataBase + ".condpgto values (10, '10 Vezes')");
            statement.execute("insert into " + dataBase + ".condpgto values (11, '11 Vezes')");
            statement.execute("insert into " + dataBase + ".condpgto values (12, '12 Vezes')");
            return true;

        } catch (SQLException ex) {
            Logger.getLogger(VerificaConexaoDAO.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }
}
